﻿/**
	calendar.js ver2.0.5
	作成者　：T-S.M
	設置方法：setCalendar(テキストボックスのID)でnewする。

	2007/07/11 : 日付の不具合を修正
	2008/01/18 : カレンダーの表示タイプ宣言追加
	2008/03/10 : カレンダーの状態を変える関数追加
	2008/03/24 : カレンダー外をクリックした際にカレンダーを閉じる処理を設定
	2008/03/27 : 日付指定をボタンのクリック無しで実行機能を追加
				 曜日の表示言語指定(日本語,英語)
	2008/04/07 : IEでの速度アップなるものを設置
	2008/04/08 : セレクトボックスよりも上に表示されるように改良
	2008/11/11 : 11月が31日まで表示されていた点を修正
	2009/02/01 : デザインを修正
				 日カレンダーに入力クリアボタンを設置
				 年月指定の入力に上下ボタンを実装 押下時に年が増えるようになりました
	2009/05/14 : 入力ボックスがhiddenのときにカレンダーの表示を制御用 option["auto_hidden"]を設定
	2009/06/01 : 年月指定でボタンを押さないでもカレンダーの表示が変わるように設定
				 月カレンダーに入力クリアボタンを設置
	2010/05/18 : カレンダーの移動処理を追加
	2011/01/06 : カレンダーの選択実行前に実行する処理を追加
	2011/07/05 : カレンダー選択時のテキストフォーカス処理のオプションを設定

	2011/12/07 : カレンダーの入力が消えていた際、カレンダーの色設定をクリアする

*/

//今日の日付格納用
var view_calendar = "";

/**
 * カレンダー配列
 * Cal_array[textBox_ID][各内容]
 **/
setCalendar.prototype.Cal_array=[];

/**
 * 当日の年月日を保存
 * today[year,month,date]
 **/
setCalendar.prototype.today = {
			 "year":new Date().getFullYear()	//年
			,"month":new Date().getMonth()		//月
			,"date":new Date().getDate()		//日
		};
/**
 * カレンダーのリスト
 **/
setCalendar.prototype.calendar_list = [];

/**
 * 日付の表示用リスト
 **/
setCalendar.prototype.day_week_list = [];
setCalendar.prototype.language_list = [];



/**
 * コンストラクタ
 * @param {Object} textObj
 */
function setCalendar(textId){

	this.textId=textId;									//テキストボックスのID（識別用
	this.Cal_array[textId]={
		"text_Obj":document.getElementById(textId),		//テキストオブジェクト
		"form_Obj":null,								//カレンダーの大枠オブジェクト
		"cal_btn_Obj":null,								//カレンダーボタンオブジェクト
		"dummy_cal_btn_Obj":null,						//ダミーカレンダーボタンオブジェクト
		"cal_Obj":null,									//カレンダーオブジェクト
		"dummy_Obj":null,								//ダミーiframeオブジェクト
		"text_flg":true,								//テキストボックス初期入力
		"btn_flg":true,									//ボタン設置フラグ
		"default_view":false,							//カレンダーの初期表示
		"prev_next":true,								//前月、翌月の表示
		"date_format":"%Y-%M-%D",						//日付の表示フォーマット
		"after_view":false,								//日付選択後の表示/非表示
		"onfocus":false,									//
		"all_pos":{
					"position":"relative",				//カレンダー全体(ボタン含む)のポジション
					"top":"0px",						//カレンダー全体(ボタン含む)の位置(TOP)
					"left":"0px"						//カレンダー全体(ボタン含む)の位置(LEFT)
				},
		"cal_pos":{
					"top":"17px",						//カレンダーのみの位置指定(TOP)
					"left":"-65px",						//カレンダーのみの位置指定(LEFT)
					"z-index":2							//重なり順
				},
		"view":{
					"year":setCalendar.prototype.today['year'],				//表示されている年
					"month":setCalendar.prototype.today['month']			//表示されている月
				},
		"select":{
					"year":setCalendar.prototype.today['year'],				//選択されている年
					"month":setCalendar.prototype.today['month'],				//選択されている月
					"date":setCalendar.prototype.today['date'],				//選択されている日
					"obj":null							//選択されているオブジェクト
				},
		"old_obj":null,									//選択されていたオブジェクト
		"view_time":10,									//マウスアウト時のカレンダー表示タイム
		"time":0,										//表示時間
		"timer":null,									//タイマー
		"close_btn":true,								//カレンダー閉じるボタン
		"jump_close_btn":true,							//年月指定ボタン
		"default_jump_text":false,						//日付指定の初期表示
		"now_jump_text":null,							//現在の日付指定の表示状態
		"clear_btn":true,								//入力クリアボタン
		"jump_year_type":"up_down",						//年月指定の年の入力タイプ
		"class":{
					"calendar":"calendar",				//カレンダー全体
					"calendar_tbl":"calendar_tbl",		//カレンダーテーブル
					"cal_button":"cal_button",			//カレンダー表示ボタン
					"cal_button_disabled":"cal_button_disabled", 	//カレンダー表示ボタン無効状態
					"navi":"navi",						//先月、来月リンク
					"week":"week",						//曜日部分
					"select":"select",					//選択部分
					"today":"today",					//当日部分
					"change":"change",					//マウスオーバー部分
					"cal_close":"cal_close",			//カレンダー閉じるボタン
					"jump_btn":"jump_btn",				//年月指定ボタン
					"jump_close":"jump_close",			//年月指定ボタン
					"monthly":"calendar",				//月カレンダー全体
					"monthly_tbl":"monthly_tbl",		//月カレンダーテーブル
					"clear_btn":"clear_btn"				//入力内容クリアボタン
				},
		"color":{
					"sunday":"red",						//日曜の文字色
					"saturday":"blue"					//土曜の文字色
				},
		"function":null,								//日付選択時に実行される関数
		"function_prev":null,							//日付選択前に実行される関数
		"type":"calendar",								//カレンダーの表示タイプ
		"auto_close":true,								//カレンダー外をクリックした際に自動で閉じる
		"init_close":true,								//初回クローズを無効にする
		"language":"Japanese",							//曜日の表示言語を設定する
		"iframe_src":null,								//ダミー用iframeのsrc要素 ※ssl通信を行う際にはこのオプションをつけること
		"jump_year_timer_id":null,						//年月指定の年上下ボタンマウス制御用
		"auto_hidden":true,								//入力ボックスがhiddenだった時にカレンダーを作成しない
		"calendar_move":false,							//カレンダー移動
		"on_time_flg":false,							//1度のみの表示フラグ
		"pointer":null,									//カレンダー表示位置ポインター
		"effectively_day_list":null						//クリックが有効な日を記述したリストを格納
														//[
														//	 [ 2009 , 7 , 10 ]
														//	,[ 2009 , 7 , 11 ]
														//]
														// の形で来た内容を
														// {
														// 		2009:{
														// 				7:{
														// 					 10:1
														// 					,11:1
														//				   }
														// 			}
														// }
														// の形にしたものが入る。

	};

	// 曜日のリストを作成
	setCalendar.prototype.day_week_list = [
			 [this.Cal_array[textId]['color'].sunday,"日","Sun"]
			,["","月","Mon"]
			,["","火","Tu"]
			,["","水","Wed"]
			,["","木","Thur"]
			,["","金","Fri"]
			,[this.Cal_array[textId]['color'].saturday,"土","Sat"]
		];

	// 月のリストを作成
	setCalendar.prototype.Monthly_list = [
			 ["","01月","January "]
			,["","02月","February"]
			,["","03月","March"]
			,["","04月","April"]
			,["","05月","May"]
			,["","06月","June"]
			,["","07月","July"]
			,["","08月","August"]
			,["","09月","September"]
			,["","10月","October"]
			,["","11月","November"]
			,["","12月","December"]
		];

	setCalendar.prototype.language_list = {
			"Japanese":1
			,"JP":1
			,"日本語":1
			,"English":2
			,"EN":2
			,"英語":2
		};

	setCalendar.prototype.browser = function(){
		var dom		 = !!document.getElementById;
		var opera	 = navigator.userAgent.indexOf("Opera") > -1;
		var ie4		 = !!document.all && !dom && !opera;
		var ie5		 = !!document.all && dom && !opera;
		var ie		 = ie4 || ie5;
		var netscape = navigator.appName.indexOf("Netscape",0) > -1;
		var ns4		 = document.layers && netscape;
		var ns6		 = dom && netscape;
		return {
			"dom"	   : dom,		//W3C DOM をサポートする場合
			"opera"	   : opera,		//Opera
			"ie4"	   : ie4,		//Internet Explorer 4.x
			"ie5"	   : ie5,		//Internet Explorer 5.x 以上
			"ie"	   : ie,		//Internet Explorer 4.x 以上
			"netscape" : netscape,	//Netscape
			"ns4"	   : ns4,		//Netscape 4.x
			"ns6"	   : ns6		//Netscape 6.x 以上
		};
	}();
}



/**************************************
 * 共通関数
 **************************************/

/*
 * オプション設定
 * 	option_array
 *	　ボタン表示				：	btn_flg  (true or false)
 *	　日付初期入力				：	text_flg (true or false)
 *	　カレンダー初期表示			：	default_view (true or false)
 *	　日付指定エリアの初期表示	：	default_jump_text(true or false)
 *	　月の前、次の表示			：	prev_next(true or false)
 *	　日付のフォーマット			：	date_format  (例："%Y/%M/%D")
 *	　日付選択後非表示			：	after_view (true or false)
 *	　カレンダーの表示時間		：	view_time  (秒数)
 *	　カレンダー全体の位置		：	all_pos[]
 *	　	・配置方法				：	position (例："relative")
 *	　	・上からの位置			：	top  (例："10px")
 *	　	・左からの位置			：	left (例："10px")
 *	　カレンダーの位置			：	cal_pos[]
 *	　	・上からの位置			：	top  (例："10px")
 *	　	・左からの位置			：	left (例："10px")
 *	　	・重なり順				：	z-index (重なり順)※IEにはまだ未対応です。CSSで宣言してください。
 *	　閉じるボタンの有無			:	close_btn (true or false)
 *	　年月指定ボタンの有無		：	jump_close_btn　(true or false)
 *	　クラスの指定				：	class[]
 *	　	・カレンダー全体			：	calendar
 *	　	・カレンダーテーブル		：	calendar_tbl
 *	　	・表示ボタン			：	cal_button
 *	　	・先月、来月ナビ			：	navi
 *	　	・曜日部分				：	week
 *	　	・選択部分				：	select
 *	　	・当日部分				：	today
 *	　	・マウスオーバー			：	change
 *	　	・閉じるボタン			：	cal_close
 *	　	・年月指定ボタン			：	jump_btn
 *	　	・年月閉じるボタン		：	jump_close
 *	　	・月カレンダー全体		：	monthly
 *	　	・月カレンダーテーブル		：	monthly_tbl
 *	　文字色					：	color[]
 *	　	・日曜日				：	sunday
 *	　	・土曜日				：	saturday
 *	　日付選択時の呼出関数		：	function
 *	　日付選択前の呼出関数		：	function
 *	　カレンダーの表示タイプ		：	type (カレンダー形式：calendar,年月のみ:monthly)
 *	　カレンダー外クリック時		：	auto_close(true or false)
 *	　カレンダーの移動			:	calendar_move(true or false)
 *	　曜日の表示言語を設定する		：	language(Japanese,JP or English,EN)
 */

 setCalendar.prototype.setOption=function(option_array){
	textId=this.textId;

	// カレンダーのタイプとクラスの初期設定
	var calTypeClass = {
							 "calendar":{"class":"calendar","date_format":"%Y-%M-%D"}
							,"monthly":{"class":"monthly","date_format":"%Y-%M"}};

	// カレンダーの表示タイプ
	if(option_array['type'] != null && calTypeClass[option_array['type']] != null){
		this.Cal_array[textId]['type'] = option_array['type'];
		this.Cal_array[textId]['date_format'] = calTypeClass[option_array['type']]['date_format'];
		this.Cal_array[textId]['class']['calendar'] = calTypeClass[option_array['type']]['class'];
	}

	//ボタンの表示
	if(option_array['btn_flg']!=null){
		this.Cal_array[textId].btn_flg=option_array['btn_flg'];
	}
	//日付の初期表示
	if(option_array['text_flg']!=null){
		this.Cal_array[textId].text_flg=option_array['text_flg'];
		if(option_array['text_flg']==false){
			this.Cal_array[textId].select.date=99;
		}
	}
	//カレンダーの初期表示
	if(option_array['default_view']!=null){
		this.Cal_array[textId].default_view=option_array['default_view'];
	}
	//初期でジャンプテキストを表示する設定
	if(option_array['default_jump_text']!=null){
		this.Cal_array[textId].default_jump_text=option_array['default_jump_text'];
	}

	// 月の前月,翌月の表示
	if(option_array['prev_next']!= null ){
		this.Cal_array[textId].prev_next=option_array['prev_next'];
	}
	//日付のフォーマット
	if(option_array['date_format']!=null){
		this.Cal_array[textId].date_format=option_array['date_format'];
	}
	//日付選択後の表示/非表示
	if(option_array['after_select']!=null){
		this.Cal_array[textId].after_view=option_array['after_view'];
	}
	//カレンダーの表示時間
	if(option_array['view_time']!=null){
		this.Cal_array[textId].view_time=option_array['view_time'];
	}
	//カレンダー全体(ボタン含む)の位置指定
	if(option_array['all_pos']!=null){
		if(option_array['all_pos'].positoin!=null){
			this.Cal_array[textId].all_pos.positoin=option_array['all_pos'].positoin;
		}
		if(option_array['all_pos'].top!=null){
			this.Cal_array[textId].all_pos.top=option_array['all_pos'].top;
		}
		if(option_array['all_pos'].left!=null){
			this.Cal_array[textId].all_pos.left=option_array['all_pos'].left;
		}
	}

	//カレンダーのみの位置指定
	if(option_array['cal_pos']!=null){
		if(option_array['cal_pos'].top!=null){
			this.Cal_array[textId].cal_pos.top=option_array['cal_pos'].top;
		}
		if(option_array['cal_pos'].left!=null){
			this.Cal_array[textId].cal_pos.left=option_array['cal_pos'].left;
		}
		if(option_array['cal_pos']["z-index"]!=null){
			this.Cal_array[textId].cal_pos["z-index"]=option_array['cal_pos']["z-index"];
		}
	}

	if(option_array['onfocus']!=null){
		this.Cal_array[textId].onfocus = option_array['onfocus'];
	}

	//カレンダーの閉じるボタン
	if(option_array['close_btn']!=null){
		this.Cal_array[textId].close_btn=option_array['close_btn'];
	}
	//入力内容クリアボタン
	if(option_array['clear_btn']!=null){
		this.Cal_array[textId].clear_btn=option_array['clear_btn'];
	}

	//年月指定ボタン
	if(option_array['jump_close_btn']!=null){
		this.Cal_array[textId].jump_close_btn=option_array['jump_close_btn'];
	}
	//年月指定ボタンタイプ
	if(option_array['jump_year_type']!=null){
		this.Cal_array[textId].jump_year_type=option_array['jump_year_type'];
	}
	//クラス指定
	if(option_array['class']!=null){
		//カレンダー全体
		if(option_array['class'].calendar!=null){
			this.Cal_array[textId]['class'].calendar=option_array['class'].calendar;
		}
		//カレンダーテーブル
		if(option_array['class'].calendar_tbl!=null){
			this.Cal_array[textId]['class'].calendar_tbl=option_array['class'].calendar_tbl;
		}
		//カレンダー表示ボタン
		if(option_array['class'].cal_button!=null){
			this.Cal_array[textId]['class'].cal_button=option_array['class'].cal_button;
		}
		//カレンダー表示ボタン_無効状態
		if(option_array['class'].cal_button_disabled!=null){
			this.Cal_array[textId]['class'].cal_button_disabled=option_array['class'].cal_button_disabled;
		}
		//先月、来月リンクナビ
		if(option_array['class'].navi!=null){
			this.Cal_array[textId]['class'].navi=option_array['class'].navi;
		}
		//曜日部分
		if(option_array['class'].week!=null){
			this.Cal_array[textId]['class'].week=option_array['class'].week;
		}
		//選択部分
		if(option_array['class'].select!=null){
			this.Cal_array[textId]['class'].select=option_array['class'].select;
		}
		//当日部分
		if(option_array['class'].today!=null){
			this.Cal_array[textId]['class'].today=option_array['class'].today;
		}
		//マウスオーバー部分
		if(option_array['class'].change!=null){
			this.Cal_array[textId]['class'].change=option_array['class'].change;
		}
		//カレンダー閉じるボタン
		if(option_array['class'].cal_close!=null){
			this.Cal_array[textId]['class'].cal_close=option_array['class'].cal_close;
		}
		//入力内容クリアボタン
		if(option_array['class'].clear_btn!=null){
			this.Cal_array[textId]['class'].clear_btn=option_array['class'].clear_btn;
		}
		//年月指定ボタン
		if(option_array['class'].jump_btn!=null){
			this.Cal_array[textId]['class'].jump_btn=option_array['class'].jump_btn;
		}
		//年月指定閉じるボタン
		if(option_array['class'].jump_close!=null){
			this.Cal_array[textId]['class'].jump_close=option_array['class'].jump_close;
		}

		//カレンダー全体(月)
		if(option_array['class'].monthly!=null){
			this.Cal_array[textId]['class'].monthly=option_array['class'].monthly;
		}
		//カレンダーテーブル(月)
		if(option_array['class'].monthly_tbl!=null){
			this.Cal_array[textId]['class'].monthly_tbl=option_array['class'].monthly_tbl;
		}
	}

	//文字色指定
	if(option_array['color']!=null){
		//日曜
		if(option_array['color'].sunday!=null){
			this.Cal_array[textId]['color'].sunday=option_array['color'].sunday;
		}
		//土曜
		if(option_array['color'].saturday!=null){
			this.Cal_array[textId]['color'].saturday=option_array['color'].saturday;
		}
	}

	// 日付選択時の外部関数の設定
	if(option_array['function']!=null){
		this.Cal_array[textId]['function'] = option_array['function'];
	}

	// 日付選択前の外部関数の設定
	if(option_array['function_prev']!=null){
		this.Cal_array[textId]['function_prev'] = option_array['function_prev'];
	}


	// 自動クローズの設定
	if(option_array['auto_close']!=null){
		this.Cal_array[textId]['auto_close'] = option_array['auto_close'];
	}

	// 初回クローズの設定
	if(option_array['init_close']!=null){
		this.Cal_array[textId]['init_close'] = option_array['init_close'];
	}
	// 曜日の表示言語の設定
	if(option_array['language']!=null){
		this.Cal_array[textId]['language'] = option_array['language'];
	}

	// iframeのsrc要素
	if(option_array['iframe_src']!=null){
		this.Cal_array[textId].iframe_src = option_array['iframe_src'];
	}

	// auto_hiddenの設定
	if(option_array['auto_hidden']!=null){
		this.Cal_array[textId].auto_hidden = option_array['auto_hidden'];
	}

	// カレンダーの移動関数
	if(option_array['calendar_move']!=null){
		this.Cal_array[textId].calendar_move = option_array['calendar_move'];
	}

	// 一回きりのカレンダー作成
	if(option_array['one_time_flg']!=null){
		this.Cal_array[textId].one_time_flg = option_array['one_time_flg'];
	}

	//ボタン無し時の誤動作防止
	if(this.Cal_array[textId].one_time_flg!=true && option_array['btn_flg']==false){
		this.Cal_array[textId].default_view=true;
		this.Cal_array[textId].view_time=0;
		this.Cal_array[textId].after_view=true;
		this.Cal_array[textId].auto_hidden=false;
		this.Cal_array[textId].init_close=false;
	}

	if(this.Cal_array[textId].default_view == true){
		this.Cal_array[textId].init_close=false;
	}

}

/**
 * クリック除外日付を設定する。
 * @param {Object} temp_effectively_day_list
 */
setCalendar.prototype.setEffectively_days=function(temp_effectively_day_list){
		textId=this.textId;
		var effectively_day_list = {};

		if(temp_effectively_day_list != null){
			for(var i=0; i<temp_effectively_day_list.length; i++){

				var year = temp_effectively_day_list[i][0];
				var month = temp_effectively_day_list[i][1];
				var day = temp_effectively_day_list[i][2];

				// 年の枠を作成
				if(!effectively_day_list[year]){
					effectively_day_list[year] = {}
				}

				// 月の枠を作成
				if(!effectively_day_list[year][month]){
					effectively_day_list[year][month] = {}
				}

				// 日の枠を作成
				if(!effectively_day_list[year][month][day]){
					effectively_day_list[year][month][day] = 1
				}

			}
		}
		// 設定
		this.Cal_array[textId]['effectively_day_list'] = effectively_day_list;
}

/*
 * カレンダー初期表示年月の設定
 */
setCalendar.prototype.setStartDays=function(year,month,day){
	this.Cal_array[this.textId].select.year=year;
	this.Cal_array[this.textId].select.month=month-1;
	this.Cal_array[this.textId].select.date=day;
}

/*
 *	カレンダー作成
 */
setCalendar.prototype.createCalendar=function(){

	// 入力フォームがhiddenだった場合カレンダーの生成を実行しない
	if(this.Cal_array[this.textId].auto_hidden && this.Cal_array[this.textId].text_Obj.type == "hidden"){
		return;
	}

	setCalendar.prototype.calendar_list.push(textId);

	setCalendar.prototype.setOutCalendarEvent();

	// ボタンとカレンダーフォームの設置
	setCalendar.prototype.setCalendar_form(this.textId);

	if(this.Cal_array[textId].type=="monthly"){
		this.Cal_array[textId].select.month = 99;
	}

	if(this.Cal_array[this.textId].text_Obj.value!=""){
	// 初期入力がある場合

		// カレンダーに日付を設定する
		set_yearmonth=setCalendar.prototype.getInput(this.textId);

		// 表示する日付が正常なら
		if(set_yearmonth==null){
			//
			set_yearmonth=this.Cal_array[this.textId].select;
		}
	}
	else{
		set_yearmonth=this.Cal_array[this.textId].select;
	}
	if(this.Cal_array[textId].default_view){

		setCalendar.prototype.setCal(set_yearmonth,this.textId);
	}
}

/*
 * ボタンとカレンダーフォームの設置
 */
setCalendar.prototype.setCalendar_form=function(textId){

	var cal_Obj=null;

	//ボタンオブジェクトの作成
	var formObj=document.createElement("span");
	formObj.className=this.Cal_array[textId]['class'].calendar;
	formObj.style.position="relative";
	formObj.style.top=this.Cal_array[textId].all_pos.top;
	formObj.style.left=this.Cal_array[textId].all_pos.left;
	formObj.style["zIndex"]= 0;

	// ボタンフラグがfalseの場合displayをnoneにする
	var btn_flg_display = "";
	if(!this.Cal_array[textId].btn_flg){
		btn_flg_display = "none";
	}

	formObj.innerHTML="<input class='"+this.Cal_array[textId]['class'].cal_button+"' type='button' style='width:20px;height:20px;display:"+btn_flg_display+"' onclick='setCalendar.prototype.disp_view(\""+textId+"\")' value=''>";

	// カレンダーのボタンオブジェクトの設定
	if(this.Cal_array[textId].one_time_flg==true){
		var cal_btn_span = document.body.insertBefore(formObj,document.body.firstChild);
		this.Cal_array[textId].pointer = this.Cal_array[textId].text_Obj.parentNode.insertBefore(document.createElement("span"),this.Cal_array[textId].text_Obj.nextSibling);
		var point = setCalendar.prototype.getElementScreenPosition(this.Cal_array[textId].pointer);
	}else{
		var cal_btn_span = this.Cal_array[textId].text_Obj.parentNode.insertBefore(formObj,this.Cal_array[textId].text_Obj.nextSibling);
		var point = {"top":0,"left":0}
		cal_btn_span.style["zIndex"] = this.Cal_array[textId].cal_pos["z-index"];
	}

	// カレンダーオブジェクトの設定
	this.Cal_array[textId].form_Obj = cal_btn_span;
	this.Cal_array[textId].cal_btn_Obj = cal_btn_span.firstChild;

	// カレンダー表示位置
	var top = (point["top"]+((this.Cal_array[textId].cal_pos.top).replace("px","")-0 ) );
	var left = (point["left"]+((this.Cal_array[textId].cal_pos.left).replace("px","")-0) );

	//カレンダーオブジェクトの作成
	var calObj=document.createElement("span");

	// カレンダーのスタイル設定
	calObj.style.position="absolute";
	calObj.style.top=this.Cal_array[textId].cal_pos.top;
	calObj.style.left=this.Cal_array[textId].cal_pos.left;
	calObj.style["zIndex"]=this.Cal_array[textId].cal_pos["z-index"]-1;

	calObj.style.top=top+"px";
	calObj.style.left=left+"px";

	// カレンダーの移動設定
	if(this.Cal_array[textId].calendar_move){
		setCalendar.prototype.setCalEvent(calObj);
	}

	formObj.appendChild(calObj);

	this.Cal_array[textId].cal_Obj=formObj.lastChild;

	dummyArea = document.createElement("div");
	dummyArea.style.position="absolute";
	dummyArea.style.top=top+"px";
	dummyArea.style.left=left+"px";

	formObj.appendChild(dummyArea);

	var src = '';
	if(this.Cal_array[textId].iframe_src){
		src = 'src="'+this.Cal_array[textId].iframe_src+'"';
	}

	dummyArea.innerHTML = '<iframe frameborder="0" width="100%" height="100%" '+src+'></iframe>';

	this.Cal_array[textId].dummy_Obj=dummyArea;

	setCalendar.prototype.set_dummy_size(textId);

	// 初期表示がfalseならdispalyをnoneにする
	if(!this.Cal_array[textId].default_view){
		calObj.style.display="none";
		dummyArea.style.display="none";
	}
}

/*
 * カレンダーを閉じる
 */
setCalendar.prototype.cal_Close=function(textId){

	if(this.Cal_array[textId].cal_Obj == null){
		return;
	}

	if(this.Cal_array[textId].cal_Obj.previousSibling){
		this.Cal_array[textId].cal_Obj.previousSibling.style.display=""
	}

	if(this.Cal_array[textId].cal_Obj.innerHTML == ""){
		return;
	}

	var jump_cell = this.Cal_array[textId].cal_Obj.firstChild.rows[1].cells[0];

	if(jump_cell.childNodes[1]){
		jump_cell.childNodes[1].value = "";
	}
	if(jump_cell.childNodes[3]){
		jump_cell.childNodes[3].value = "";
	}

	// ダミーを見えなくする
	this.Cal_array[textId].dummy_Obj.style.display="none";

	// カレンダーを閉じる
	this.Cal_array[textId].cal_Obj.style.display="none";
	this.Cal_array[textId].cal_Obj.parentNode.style["zIndex"] = this.Cal_array[textId].cal_pos["z-index"];
	this.Cal_array[textId].now_jump_text = null;

	// 一回きりの場合カレンダーを削除する
	if(this.Cal_array[textId].one_time_flg==true){
		setCalendar.prototype.deleteCaledar(textId);
	}

}

/*
 * ダミーの縦幅と横幅をカレンダーにあわせる
 */
setCalendar.prototype.set_dummy_size = function(textId){

	var width = setCalendar.prototype.get_calendar_width(textId);
	var height = setCalendar.prototype.get_calendar_height(textId);
	var element = this.Cal_array[textId].dummy_Obj;

	if( setCalendar.prototype.browser.ns4 ){
		element.resizeTo( width , height );
	}else if( setCalendar.prototype.browser.ns6 ) {
		element.style.width  = width + "px";
		element.style.height = height + "px";
	}else if( setCalendar.prototype.browser.ie ) {
		element.style.width  = width+"px";
		element.style.height = height+"px";
	}else if( setCalendar.prototype.browser.opera ) {
		element.style.width  = width;
		element.style.height = height;
	}

	var src = '';
	if(this.Cal_array[textId].iframe_src){
		src = 'src="'+this.Cal_array[textId].iframe_src+'"';
	}
	element.innerHTML = '<iframe frameborder="0" width="100%" height="100%" '+src+'></iframe>';

}

/*
 * カレンダーの横幅を取得
 */
setCalendar.prototype.get_calendar_width = function(textId){
	var element = this.Cal_array[textId].cal_Obj;

	if( document.layers ){
		return element.clip.width;
	}
	return element.offsetWidth || element.style.pixelWidth || 0;
};

/*
 * カレンダーの縦幅を取得
 */
setCalendar.prototype.get_calendar_height = function(textId){
	var element = this.Cal_array[textId].cal_Obj;
	if( document.layers ){
		return element.clip.height;
	}
	return element.offsetHeight || element.style.pixelHeight || 0;
};

/*
 * 日付指定の年の値を上下させる
 */
setCalendar.prototype.jump_year_updown = function(btn_obj,updown,textId){

	var year_input = null;
	if(this.Cal_array[textId]['type'] == 'monthly'){
		year_input = btn_obj
//		alert(btn_obj.parentNode.parentNode);
	}else{
		year_input = btn_obj.parentNode.parentNode.childNodes[1];
	}

	if(year_input == null){
		return;
	}
	var year_value = year_input.value-0;

	if(updown == "up"){
		year_value++;
	}else if(updown == "down"){
		year_value--;
	}

	year_input.value = year_value;

}

/*
 * 日付指定の年上下ボタンでマウスが押されたら実効
 */
setCalendar.prototype.jump_updown_MouseDown = function(btn_obj,updown,textId){

	setCalendar.prototype.jump_year_updown(btn_obj,updown,textId);

	this.Cal_array[textId]['jump_year_timer_id'] = setInterval(function(){ setCalendar.prototype.jump_year_updown(btn_obj,updown,textId) },200);
}

/*
 * 日付指定の年上下ボタンでマウスが離されたら実効
 */
setCalendar.prototype.jump_updown_MouseUp = function(btn_obj,textId){
	if(this.Cal_array[textId]['jump_year_timer_id']){
		clearTimeout(this.Cal_array[textId]['jump_year_timer_id']);
		this.Cal_array[textId]['jump_year_timer_id']=null;
		var td_child_node = btn_obj.parentNode;
		setCalendar.prototype.cal_Jump(td_child_node,textId);
	}
}


/***********************************************
*
*	日カレンダーの処理
*
************************************************/

//カレンダーの設置
setCalendar.prototype.setCal=function(display,textId,jump_filed_hidden)
{
	var set_date = 1;					//日登録用変数
	var text ="";						//表示用
	var color = "";						//表示色変化用
	var last_year;
	var last_month;

	var year=display['year'];
	var month=display['month'];
	var date=display['date'];

	this.Cal_array[textId].view={
			'year':display['year'],
			'month':display['month']
		};

	//開始日の取得
	var start_date = new Date(year,month,1);	//指定した月の1日のデータ
	var start_day = start_date.getDay();		//1日の曜日

	//最終日の取得
	if(month == 11){
		last_year = year+1;
		last_month = 0;
	}else{
		last_year = year;
		last_month = month + 1;
	}

	var last_date = new Date(last_year,last_month,1);						//来月の1日のデータ
	last_date.setTime(last_date.getTime() - (1 * 24 * 3600 * 1000));		//指定した月の最終日のデータ設定
	var last = last_date.getDate();											//指定した月の最終日

	text = text + "<table  border='0' style='position:ablsolute;' class='"+this.Cal_array[textId]['class'].calendar_tbl+"'>";

	text = text + "<tr><td colspan='7' style='width:100%;' align='center'>";

//	//年月指定閉じるボタン作成
//	if(this.Cal_array[textId].jump_close_btn!=false){
//		text = text + "&nbsp;<input type='button' class='"+this.Cal_array[textId]['class'].jump_close+"' onClick='setCalendar.prototype.jump_Close(this,\""+textId+"\")'>";
//	}

	//入力内容クリアボタン
	if(this.Cal_array[textId].clear_btn!=false){
		text = text + "<input type='button' onMouseover='this.style.cursor=\"hand\"' class='"+this.Cal_array[textId]['class'].clear_btn+"' onClick='setCalendar.prototype.cal_Clear(\""+textId+"\")'>";
	}

	//ナビあり？
	if(this.Cal_array[textId].prev_next == true){
		text = text + "<a class='"+this.Cal_array[textId]['class'].navi+"' onClick='setCalendar.prototype.setDate(" + year +","+ month +",\"back\",\""+textId+"\")' title='前月へ'><<</a>&nbsp;";
	}

	// 表示年月の作成
	var view_year = "";
	if(this.language_list[this.Cal_array[textId]['language']] == 1){
		var view_month = this.Monthly_list[month][this.language_list[this.Cal_array[textId]['language']]];
		view_year = ""+ year + "年"+ view_month ;
	}else{
		var view_month = this.Monthly_list[month][this.language_list[this.Cal_array[textId]['language']]];
		view_year = view_month.substr(0,3) + ". " + year;
	}

	if(this.Cal_array[textId].jump_close_btn!=false){
		text = text + "<a class='"+this.Cal_array[textId]['class'].jump_close+"' onClick='setCalendar.prototype.jump_Close(this,\""+textId+"\")'> "+ view_year +"</a>";
	}else{
		text = text + view_year;
	}
	//ナビあり？
	if(this.Cal_array[textId].prev_next == true){
		text = text + "&nbsp;<a class='navi' onClick='setCalendar.prototype.setDate("+year+","+month+",\"next\",\""+textId+"\")' title='翌月へ'>>></a>"
	}


	//カレンダー閉じるボタン作成
	if(this.Cal_array[textId].close_btn!=false){
		text = text + "&nbsp;<input type='button' onMouseover='this.style.cursor=\"hand\"' class='"+this.Cal_array[textId]['class'].cal_close+"' onClick='setCalendar.prototype.cal_Close(\""+textId+"\")'>";
	}else{
		text = text + "&nbsp;";
	}

	text = text + "</td></tr>";

	var jump_state = "none";

	if(this.Cal_array[textId].now_jump_text == null){
		// 初期設定
		this.Cal_array[textId].now_jump_text = this.Cal_array[textId].default_jump_text;
	}

	if(this.Cal_array[textId].now_jump_text != false || (jump_filed_hidden != null && jump_filed_hidden == false) ){
		jump_state = "";
	}

	//年月の指定入力フォーム部分 改訂版
	text += "<tr style='display:"+jump_state+"' class='calendar_jump_row'><td colspan='7' valign='top' style='text-align:center;vertical-align:middle;'>";

	if(this.language_list[this.Cal_array[textId]['language']] == 1){
		text += "指定：";
	}else{
		text += "appoints:";
	}


	text += 	"<input type='text' size='4' maxlength='4' value='"+year+"' style='ime-mode:disabled;' onChange='setCalendar.prototype.cal_Jump(this,\""+textId+"\")'><!--";
	text += "--><span style='position:relative;top:0px;vertical-align:top;height:18px;'><!--";
	text += " --><input type='button' title='ボタンを押し続けると年数が増えます' style='position:absolute;top:0px;' class='jump_year_up' onMouseDown='setCalendar.prototype.jump_updown_MouseDown(this,\"up\",\""+textId+"\")' onMouseUp='setCalendar.prototype.jump_updown_MouseUp(this,\""+textId+"\")' onMouseOut='setCalendar.prototype.jump_updown_MouseUp(this,\""+textId+"\")'><!--";
	text += " --><input type='button' title='ボタンを押し続けると年数が減ります' style='position:absolute;top:11px;' class='jump_year_down' onMouseDown='setCalendar.prototype.jump_updown_MouseDown(this,\"down\",\""+textId+"\")' onMouseUp='setCalendar.prototype.jump_updown_MouseUp(this,\""+textId+"\")' onMouseOut='setCalendar.prototype.jump_updown_MouseUp(this,\""+textId+"\")'><!--";

//	text += "	--><a class='jump_year_up' style='display:block' onMouseDown='setCalendar.prototype.jump_updown_MouseDown(this,\"up\",\""+textId+"\")' onMouseUp='setCalendar.prototype.jump_updown_MouseUp(this,\""+textId+"\")'></a><!--"
//	text += "	--><a class='jump_year_down' style='display:block' onMouseDown='setCalendar.prototype.jump_updown_MouseDown(this,\"down\",\""+textId+"\")' onMouseUp='setCalendar.prototype.jump_updown_MouseUp(this,\""+textId+"\")'></a><!--"

	text += "--></span><!--";
	text += "--><span style='margin-left:20px;'></span><!--";
	text += "--><select style='height:18px;' onChange='setCalendar.prototype.cal_Jump(this,\""+textId+"\")'>";

		for(var i=1;i<=12;i++){
			var month_value = i;
/*
			if(i<10){
				month_value = "0"+month_value;
			}
*/
			var month_selected = "";
			if((month+1) == month_value){
				month_selected = "selected";
			}
			text += "<option value='"+month_value+"' "+month_selected+">";
			text += ""+month_value+"";
			text += "</optoin>";
		}

	text += "</select>";


////// 昔の指定方式
//	text += "	<input type='button' class='"+this.Cal_array[textId]['class'].jump_btn+" ' onClick='setCalendar.prototype.cal_Jump(this,\""+textId+"\")'>";
/*
	text = text + "指定：";
	text = text + "<input type='text' style='width:34px;height:17px;ime-mode:disabled;' value='"+year+"' onChange='setCalendar.prototype.cal_Jump(this,\""+textId+"\",false)'>年<input type='text' style='width:20px;height:17px;ime-mode:disabled;'value='"+(month+1)+"'onChange='setCalendar.prototype.cal_Jump(this,\""+textId+"\",false)'>月&nbsp;";
	text += "<input class='"+this.Cal_array[textId]['class'].jump_btn+"'type='button' style='width:17px;height:17px;' onClick='setCalendar.prototype.cal_Jump(this,\""+textId+"\")'>";

//	text += "<input type='hidden' style='width:34px;height:17px;ime-mode:disabled;' value='"+year+"' onChange='setCalendar.prototype.cal_Jump(this,\""+textId+"\",false)'><input type='hidden' style='width:20px;height:17px;ime-mode:disabled;'value='"+(month+1)+"'onChange='setCalendar.prototype.cal_Jump(this,\""+textId+"\",false)'>&nbsp;";

//	text += "<input type='text' style='width:34px;height:17px;ime-mode:disabled;' value='"+year+"' onChange='setCalendar.prototype.cal_Jump(this,\""+textId+"\",false)'>年<input type='text' style='width:20px;height:17px;ime-mode:disabled;'value='"+(month+1)+"'onChange='setCalendar.prototype.cal_Jump(this,\""+textId+"\",false)'>月&nbsp;";
//	text += "<input class='"+this.Cal_array[textId]['class'].jump_btn+"'type='button' style='width:17px;height:17px;' onClick='setCalendar.prototype.cal_Jump(this,\""+textId+"\")'>";

*/

	text += "</td></tr>";


	//曜日
	text += "<tr>";

	for(var i=0;i<this.day_week_list.length;i++){
		text += "<td class='" + this.Cal_array[textId]['class'].week + "'>";
		text += "<span style='color: " + this.day_week_list[i][0] + ";'>" + this.day_week_list[i][this.language_list[this.Cal_array[textId]['language']]] + "</span>";
		text += "</td>";
	}

	var effectively_day_list = this.Cal_array[textId]['effectively_day_list'];

	// カレンダー作成
	text += "<tr>\n";

	// 当月のスタート位置までTDを入れ込む
	for(var i=0;i<start_day;i++){
		text += "<td class='cal_disabled_day'></td>\n";
	}
	var set_day = start_day;
	// 一月分の日付データだけループ
	for(var i=1; set_date <= last; i++){
		var fcolor = "";
		var holiday_name = setCalendar.prototype.checkHoliday(year,month,set_date,set_day);

		// 日曜の場合
		if(set_day==0){
			fcolor=this.Cal_array[textId]['color'].sunday;
		}
		// 祝日の場合
		else if(holiday_name != ""){
			fcolor=this.Cal_array[textId]['color'].sunday;
		}
		// 土曜の場合
		else if(set_day==6){
			fcolor=this.Cal_array[textId]['color'].saturday;
		}

		// 無効日付の取得
		var effectively_flg = 0;
		if(effectively_day_list != null){
			if(effectively_day_list[year] != null){
				if(effectively_day_list[year][month+1] != null){
					effectively_flg = effectively_day_list[year][month+1][set_date];
				}
			}
		}else{
			effectively_flg = 1;
		}

		if(effectively_flg == 1){
			// 選択された日の場合
			if(year == this.Cal_array[textId].select.year && month==this.Cal_array[textId].select.month && set_date == this.Cal_array[textId].select.date){
				text += "<td title='"+holiday_name+"' class='"+this.Cal_array[textId]['class'].select+"' style='color:" + fcolor + "' onclick='setCalendar.prototype.selected(this,\""+textId+"\")' onMouseOver='setCalendar.prototype.MouseOver(this,\""+textId+"\")' onMouseOut='setCalendar.prototype.MouseOut(this,\""+textId+"\")'>";
				text += set_date;
				text += "</td>\n";
			}
			// 今日の日付
			else if(year == setCalendar.prototype.today.year && month==setCalendar.prototype.today.month && set_date == setCalendar.prototype.today.date){
				text += "<td title='"+holiday_name+"' class='"+this.Cal_array[textId]['class'].today+"' style='color:" + fcolor + "' onclick='setCalendar.prototype.selected(this,\""+textId+"\")' onMouseOver='setCalendar.prototype.MouseOver(this,\""+textId+"\")' onMouseOut='setCalendar.prototype.MouseOut(this,\""+textId+"\")'>";
				text += set_date;
				text += "</td>\n";
			}
			// それ以外
			else{
				text += "<td title='"+holiday_name+"' class='cal_abled_day' style='color:" + fcolor + "' onclick='setCalendar.prototype.selected(this,\""+textId+"\")' onMouseOver='setCalendar.prototype.MouseOver(this,\""+textId+"\")' onMouseOut='setCalendar.prototype.MouseOut(this,\""+textId+"\")'>";
				text += set_date;
				text += "</td>\n";
			}
		}else{
				text += "<td title='"+holiday_name+"' class='cal_disabled_day' style='color:" + fcolor + ";text-decoration:line-through' >";
				text += set_date;
				text += "</td>\n";
		}

		set_date++;
		set_day++;
		if(set_day == 7){
			text += "</tr>\n";
			set_day = 0;
		}
	}
	// 日曜以外には閉じTRを入れる。日曜の場合既に閉じTRが入っている
	if(set_day != 0){
		// 足りていない分のTDオブジェクトを設定
		for(var set_day; set_day<7;set_day++){
			text += "<td class='cal_disabled_day'></td>\n";
		}
		text += "</tr>\n";
	}

	text += "</table>";

	this.Cal_array[textId].cal_Obj.innerHTML = text;

	if(this.Cal_array[textId].select.date!=99){
		for(var i=2;i<this.Cal_array[textId].cal_Obj.firstChild.firstChild.childNodes.length;i++){
			for(var n=0;n<this.Cal_array[textId].cal_Obj.firstChild.firstChild.childNodes[i].childNodes.length;n++){
				if(year == this.Cal_array[textId].select.year && month==this.Cal_array[textId].select.month && this.Cal_array[textId].cal_Obj.firstChild.firstChild.childNodes[i].childNodes[n].innerHTML == this.Cal_array[textId].select.date)
				{
					this.Cal_array[textId].old_obj=this.Cal_array[textId].cal_Obj.firstChild.firstChild.childNodes[i].childNodes[n];
					break;
				}
			}
		}
	}

	//テキストボックスの初期入力
	if(this.Cal_array[textId].text_flg && this.Cal_array[textId].text_Obj.value==""){
		setCalendar.prototype.setText(this.Cal_array[textId].select.year,this.Cal_array[textId].select.month,this.Cal_array[textId].select.date,textId);
	}

	setCalendar.prototype.set_dummy_size(textId);

}

// カレンダーの状態を変える処理
setCalendar.prototype.disabledCalendar = function(textId,style,flg){
	this.Cal_array[textId]["text_Obj"][style]=flg;
	this.Cal_array[textId]["cal_btn_Obj"]["disabled"]=flg;

	if(flg == true){
		this.Cal_array[textId]["cal_btn_Obj"]["className"]=this.Cal_array[textId]["class"]["cal_button_disabled"];
	}else if(flg == false){
		this.Cal_array[textId]["cal_btn_Obj"]["className"]=this.Cal_array[textId]["class"]["cal_button"];
	}

}

// 年月指定の年月変更ボタンを押したときの処理
setCalendar.prototype.updownJump_date = function(textId,obj,event,date_type){

	var obj_width = obj.clientWidth;
	var obj_height = obj.clientHeight;

	if (!event) { event = window.event; }
	var hx, hy;
	if (document.all) { // for IE
		hx = event.offsetX;
		hy = event.offsetY;

	} else {
		hx = event.layerX;
		hy = event.layerY;

		var offset_x = obj.offsetLeft;
		var offset_y = obj.offsetTop;

		hx = hx - offset_x;
		hy = hy - offset_y;
	}

	if(hy < obj_height/2){
//		alert("up");
	}else if(hy >  obj_height/2){
//		alert("down");
	}
}

// カレンダー外をクリックした際にカレンダーを閉じる処理
setCalendar.prototype.outCalendar_click = function(event){

	var event_obj = null;	// クリックしたオブジェクト

	if( window.event ){
		event_obj = window.event.srcElement ;
	}else {
		event_obj = event.target;
	}

	if(event_obj == ""){
		return;
	}

	if(event_obj){

		if(event_obj.className == "dumy_cal_button"){
			for(var i=0;i<setCalendar.prototype.calendar_list.length;i++){
				var calendar_id = setCalendar.prototype.calendar_list[i];
			}
			return false;
		}
		// カレンダーの設定分ループ
		for(var i=0;i<setCalendar.prototype.calendar_list.length;i++){

			// カレンダーIDの取得
			var calendar_id = setCalendar.prototype.calendar_list[i];

			if(event_obj.className == setCalendar.prototype.Cal_array[calendar_id]["class"]["jump_btn"]){
				break;
			}

			// もしカレンダーが表示されていない場合は次へ
			if(setCalendar.prototype.getCalendar_display(calendar_id) == "none"){
				continue;
			}else if(!setCalendar.prototype.Cal_array[calendar_id]['init_close']){
				setCalendar.prototype.Cal_array[calendar_id]['init_close'] = true
				continue;
			}else if(!setCalendar.prototype.Cal_array[calendar_id]['auto_close']){
				continue;
			}

			// カレンダーオブジェクトの取得
			var cal_obj = setCalendar.prototype.Cal_array[setCalendar.prototype.calendar_list[i]]['cal_Obj'];
			var cal_btn_obj = setCalendar.prototype.Cal_array[setCalendar.prototype.calendar_list[i]]['cal_btn_Obj'];

			// カレンダーとイベントオブジェクトの比較
			if(cal_btn_obj != event_obj){

				var check_obj = event_obj;
				var close_flg = true;			// 閉じるフラグ　trueで閉じる、falseで閉じない

				// チェックするオブジェクトがnullになるまでループする
				while(check_obj){
					// クリックしたオブジェクトがカレンダーの一部なら閉じるフラグをfalseにして抜ける。
					if(check_obj == cal_obj){
						close_flg = false;
						break;
					}

					check_obj = check_obj.offsetParent;	// チェック対象を1つ上のオブジェクトに移動
				}
				// 違うものなら閉じる
				if(close_flg){
					setCalendar.prototype.cal_Close(calendar_id);
				}
			}
		}
	}
}

// ブラウザを判断し、クリックイベントを追加
setCalendar.prototype.setOutCalendarEvent = function(){

	myOP = window.opera;             //OP
	myN6 = document.getElementById;  // N6 or IE
	myIE = document.all;             // IE
	myN4 = document.layers;          // N4

	if (myOP){                          // OP?

	}else if (myIE){                    // IE?
		document.body.attachEvent("onclick",setCalendar.prototype.outCalendar_click);
	}else if (myN6){                    // N6?
		document.body.addEventListener("click",setCalendar.prototype.outCalendar_click,false);
	}else if (myN4){                    // N4?

	}
}


setCalendar.prototype.setCalEvent=function(obj){

	myOP = window.opera;             //OP
	myN6 = document.getElementById;  // N6 or IE
	myIE = document.all;             // IE
	myN4 = document.layers;          // N4

	if (myOP){                          // OP?

	}else if (myIE){                    // IE?
		obj.attachEvent("onmouseover",setCalendar.prototype.addXY);
		obj.attachEvent("onmouseout",setCalendar.prototype.removeXY);
	}else if (myN6){                    // N6?
		obj.addEventListener("mouseover",setCalendar.prototype.addXY,false);
		obj.addEventListener("mouseout",setCalendar.prototype.removeXY,false);
	}else if (myN4){                    // N4?

	}

}


/*
 * 入力によってカレンダーの初期表示設定
 */
setCalendar.prototype.getInput=function(textId){

	//^((?:\d{2})|(?:\d{4}))[/:-]?(\d{2})[/:-]?(\d{2})$

	set_yearmonth = {
		"year":this.Cal_array[textId].select.year,
		"month":this.Cal_array[textId].select.month,
		"date":this.Cal_array[textId].select.date
	}

	if(setCalendar.prototype.chkInput(textId)){

		var time_text = this.Cal_array[textId].text_Obj.value;

		var format=this.Cal_array[textId].date_format;
		var format_array = format.match(/\%Y|\%y|\%[0]*[M]|\%[0]*[D]/g);

		var input_array={
		"year":"",
		"month":"",
		"day":""
		};

		if(time_text!=""){
			for(var i=0;i<format_array.length;i++){
//				if(format_array[i]=="%Y"){
//					input_array["year"]=i;
//				}
				//2桁年表示に対応
				if(format_array[i].match(/\%[Y|y]/)){
					input_array["year"]=i;
				}

				if(format_array[i].match(/\%0*M/)){
					input_array["month"]=i;
				}
				if(format_array[i].match(/\%0*D/)){
					input_array["day"]=i;
				}
			}
			var	time_array = time_text.match(/\d+/g);

			if(time_array){
				if(input_array['year']!=null && input_array['month']!=null){
					if(time_array[input_array['year']]!=null&&time_array[input_array['month']]){

						//日付の妥当性チェック
						year=parseInt(time_array[input_array['year']],10);
						month=parseInt(time_array[input_array['month']],10);

						if(year < 1000){
							year = 2000+year;
						}

						flg=false;

						if(input_array['day']==""){
						// 日付の入力が無い場合
							input_date=new Date(year,month-1);
							if(year==input_date.getFullYear()&&month==input_date.getMonth()+1){
								time_array[input_array['day']]=99;
								flg=true;
							}
						}else{
						// 日付の入力があるとき
							if(time_array[input_array['day']]!=null){
								days=time_array[input_array['day']].replace(/^0/,"");

								input_date=new Date(year,(month-1),days);
								if(year==input_date.getFullYear()&&(month-1)==input_date.getMonth()&&days==input_date.getDate()){
									flg=true;
								}
							}
						}

						if(flg){
						// 入力内容が正常なとき
							set_yearmonth["year"] = year;
							set_yearmonth["month"] = parseInt(time_array[input_array['month']]-1,10);
							if(input_array['day'] != ""){
								set_yearmonth["date"] = parseInt(time_array[input_array['day']].replace(/^0/,""),10);
							}

							this.Cal_array[textId].select.year = year;
							this.Cal_array[textId].select.month = parseInt(time_array[input_array['month']]-1,10);
							if(input_array['day'] != ""){
								this.Cal_array[textId].select.date = parseInt(time_array[input_array['day']].replace(/^0/,""),10);
							}
						}
					}
				}
			}
		}
	}

	return set_yearmonth;
}
/*
 * 年月指定を閉じる
 */
setCalendar.prototype.jump_Close=function(btn_obj,textId){
	obj=btn_obj.parentNode.parentNode.nextSibling;
	if(obj.style.display!="none"){
		obj.style.display="none";
		this.Cal_array[textId].now_jump_text = false;
	}else{

		obj.firstChild.childNodes[1].value=this.Cal_array[textId].view.year;
//		obj.firstChild.childNodes[7].value=this.Cal_array[textId].view.month+1;

		obj.firstChild.childNodes[7].options[this.Cal_array[textId].view.month].selected = true;

		obj.style.display="";
		this.Cal_array[textId].now_jump_text = true;

	}
	setCalendar.prototype.set_dummy_size(textId);

}

/**
 * カレンダーの入力をクリアする
 */
setCalendar.prototype.cal_Clear=function(textId){
	this.Cal_array[textId].text_Obj.value="";
	this.Cal_array[textId].old_obj = null;

	this.Cal_array[textId].select.year = setCalendar.prototype.today.year;
	this.Cal_array[textId].select.month = setCalendar.prototype.today.month;
	this.Cal_array[textId].select.date = 99;

}

/*
 * カレンダーのアルファをかけていく
 */
setCalendar.prototype.cal_Alpha = function(textId,opacity){

	var timerID = null;
	if (document.all) {
		this.Cal_array[textId].cal_Obj.style.filter = 'alpha(opacity=' + opacity + ')';
	}else{
		this.Cal_array[textId].cal_Obj.style.MozOpacity = opacity / 100.0;
	}

	// タイマーの初期化
	clearTimeout(timerID);
	var speed = 30;
	// 透過値の値が100になるまで繰り返す
	if (opacity > 0) {
		opacity -= 5;
		timerID = setTimeout("setCalendar.prototype.cal_Alpha('"+textId+"',"+opacity+")", speed);
		this.Cal_array[textId].cal_Obj.style.display="";
		this.Cal_array[textId].cal_Obj.parentNode.style["zIndex"] = this.Cal_array[textId].cal_pos["z-index"]+1;
	}else{
		this.Cal_array[textId].cal_Obj.style.display="none";
		this.Cal_array[textId].cal_Obj.parentNode.style["zIndex"] = this.Cal_array[textId].cal_pos["z-index"];
	}

	return opacity;
}

/*
 * カレンダーの表示状態を取得する
 */
setCalendar.prototype.getCalendar_display = function(textId){
	if(!this.Cal_array[textId]){
		return "none";
	}

	return this.Cal_array[textId].cal_Obj.style.display;
}

/*
 * カレンダーのheight値を取得する
 */
setCalendar.prototype.getCalendar_height = function(textId){
	return this.Cal_array[textId].cal_Obj.offsetHeight;
}

/*
 * カレンダーのwidth値を取得する
 */
setCalendar.prototype.getCalendar_width = function(textId){
	return this.Cal_array[textId].cal_Obj.offsetWidth;
}

/*
 * 来月、先月の処理
 */
setCalendar.prototype.setDate=function(set_year,set_month,text,textId){
	//来月の表示
	if(text == "next"){
		if(set_month == 11){
			set_year++;
			set_month = 0;
		}
		else{
			set_month++;
		}
	}
		//先月の表示
	else if(text == "back"){
		if(set_month == 0){
			set_year--;
			set_month=11;
		}
		else{
			set_month--;
		}
	}

	set_yearmonth = {
					"year":set_year,
					"month":set_month,
					"date":99
				}
	setCalendar.prototype.setCal(set_yearmonth,textId);
}

/*
 * 年月指定の処理
 */
setCalendar.prototype.cal_Jump=function(btn_obj,textId){


	var td_obj = btn_obj.parentNode;

	var year_input=td_obj.childNodes[1].value;
	var month_select=td_obj.childNodes[7];
	var select_index = month_select.selectedIndex;
	var month_input = month_select.options[select_index].value;

	if(year_input!=""&&month_input!=""){
		if(parseInt(year_input)>0&&parseInt(month_input)>=1&&parseInt(month_input)<=12){
				set_yearmonth = {
					"year":parseInt(year_input),
					"month":parseInt(month_input)-1,
					"date":99
				}
			setCalendar.prototype.setCal(set_yearmonth,textId,false);
		}
	}
}


/*
 * カレンダーボタンの表示/非表示
 */
setCalendar.prototype.disp_view=function(textId){

	var calendar = this.Cal_array[textId].cal_Obj;
	var dummy_frame = this.Cal_array[textId].dummy_Obj;
	var parent_obj = calendar.parentNode;

	//カレンダーの再設定
	if(calendar.style.display=="none")
	{

		if (document.all) {
		    this.Cal_array[textId].cal_Obj.style.filter = 'alpha(opacity=100)';
		}else{
		    this.Cal_array[textId].cal_Obj.style.MozOpacity = 100 / 100.0;
		}


		if(this.Cal_array[textId].text_Obj.value!=""){
			set_yearmonth=setCalendar.prototype.getInput(textId);
			if(set_yearmonth==null){
				set_yearmonth=this.Cal_array[textId].select;
			}
		}
		else{
			this.Cal_array[textId].select = {
												 "year":setCalendar.prototype.today.year
												,"month":setCalendar.prototype.today.month
												,"date":setCalendar.prototype.today.date
											};

			this.Cal_array[textId].select.object = null;

			set_yearmonth=this.Cal_array[textId].select;
		}

		if(this.Cal_array[textId].type=="monthly"){
			setCalendar.prototype.setMonthly(set_yearmonth,textId);
		}else if(this.Cal_array[textId].type=="calendar"){
			setCalendar.prototype.setCal(set_yearmonth,textId);
		}
	}

	// ボタンが表示されない場合カレンダーのdisplayを一時「none」にして下の処理で再度オープンする
	if(!this.Cal_array[textId].btn_flg){
		calendar.previousSibling.style.display="none"
	}

	// カレンダーが閉じられているとき
	if(calendar.style.display=="none"){
		// 親の要素からz-indexをあげる
		parent_obj.style["zIndex"] = this.Cal_array[textId].cal_pos["z-index"]+3;

		// styleのdisplayを「block」にすることで表示する
		dummy_frame.style.display = "block";
		calendar.style.display = "block";

		setCalendar.prototype.set_dummy_size(textId);

		// 別のカレンダーが表示されているかチェックする
		setCalendar.prototype.MouseTableOver(textId);
	}
	else{
		// styleのdisplayを「none」にすることで非表示にする
		var data_value = this.Cal_array[textId].text_Obj.value;
		this.Cal_array[textId].text_Obj.value = "";

		if(this.Cal_array[textId].onfocus){
			this.Cal_array[textId].text_Obj.focus();
		}
		this.Cal_array[textId].text_Obj.value = data_value;

		setCalendar.prototype.cal_Close(textId);

	}
}
/*
// カレンダーと別のボタンを押すと閉じる
document.onclick = function(e){
	if(e != null){
		var event_obj = e.target;


	}else{
		var event_obj = event.srcElement;
	}
	if(event_obj.tagName == "INPUT" && event_obj.type=="button" && event_obj["className"]!="cal_button" && event_obj["className"]!= "jump_close"){

		if(view_calendar != ""){
			setCalendar.prototype.cal_Close(view_calendar);
		}
	}
}
*/
/*
 * 日付選択時の処理
 */
setCalendar.prototype.selected=function(object,textId){
	default_class = "";

	var function_prev = true;
	if(this.Cal_array[textId]['function_prev'] != null){
		function_prev = eval(this.Cal_array[textId]['function_prev']);
	}

	if(function_prev && object.firstChild.nodeValue !="")
	{
		if(this.Cal_array[textId].select.date!=99){
			if(this.Cal_array[textId].select.year == this.Cal_array[textId].view.year && this.Cal_array[textId].select.month==this.Cal_array[textId].view.month){

				if(this.Cal_array[textId].view.year==setCalendar.prototype.today.year && this.Cal_array[textId].view.month==setCalendar.prototype.today.month && this.Cal_array[textId].old_obj.innerHTML==setCalendar.prototype.today.date){
					default_class =this.Cal_array[textId]['class'].today;
				}
				this.Cal_array[textId].old_obj.className = default_class;
			}
		}

		this.Cal_array[textId].select.year = this.Cal_array[textId].view.year;
		this.Cal_array[textId].select.month = this.Cal_array[textId].view.month;
		this.Cal_array[textId].select.date = object.firstChild.nodeValue;

		object.className = this.Cal_array[textId]['class'].select;
		this.Cal_array[textId].old_obj=object;
		setCalendar.prototype.setText(this.Cal_array[textId].view.year ,this.Cal_array[textId].view.month,this.Cal_array[textId].select.date,textId);

		//選択後のカレンダー表示切り替え
		if(!this.Cal_array[textId].after_view){
			setCalendar.prototype.disp_view(textId);
		}
	}
}

/*
 * 入力ボックスチェック type=text,hidden,passwordのときtrue
 */
setCalendar.prototype.chkInput=function(textId){
	obj=this.Cal_array[textId].text_Obj;
	if(obj.tagName=="INPUT"){
		type=obj.type;
		if(type=="text"||type=="hidden"||type=="password"){
			flg=true;
		}else{
			flg=false;
		}
	}
	else{
		flg=false;
	}
	return flg;
}

/*
 * テキストボックスに値の代入
 */
setCalendar.prototype.setText=function(year,month,date,textId){
	/*@cc_on
	var doc = document;
	eval('var document = doc');
	@*/

	if(setCalendar.prototype.chkInput(textId)){
		time_format=this.Cal_array[textId].date_format;

		//2桁年表示に対応
		while(time_format.match(/\%[Y]|[y]/)){
			if(time_format.indexOf("%Y",0)>-1){
				time_format=time_format.replace("%Y",year);
			}else if(time_format.indexOf("%y",0)>-1){
				time_format=time_format.replace("%y", (year+"").substring(2, 4));
			}
		}

		while(time_format.match(/\%[0]*[M]/)){
			if(time_format.indexOf("%0M",0)>-1){
				if(month+1<10){
					time_format=time_format.replace("%0M","0"+(month+1));
				}else{
					time_format=time_format.replace("%0M",(month+1));
				}
			}
			else if(time_format.indexOf("%M",0)>-1){
				time_format=time_format.replace("%M",month+1);
			}
		}
		while(time_format.match(/\%[0]*[D]/)){
			if(time_format.indexOf("%0D",0)>-1){
				if(date<10){
					time_format=time_format.replace("%0D","0"+date);
				}else{
					time_format=time_format.replace("%0D",date);
				}
			}
			else if(time_format.indexOf("%D",0)>-1){
				time_format=time_format.replace("%D",date);
			}
		}
		year_text = this.Cal_array[textId].text_Obj;
		year_text.value = time_format;

		if(this.Cal_array[textId]['function'] != null){
			eval(this.Cal_array[textId]['function']);
		}

	}
}

/*
 * マウスオーバー時
 */
setCalendar.prototype.MouseOver=function(object,textId){
	document.body.style.cursor = "default";
	object.className = this.Cal_array[textId]['class'].change;
}

/*
 * マウスアウト時
 */
setCalendar.prototype.MouseOut=function(object,textId){

	document.body.style.cursor = "default";
	default_class="cal_abled_day";
	if(this.Cal_array[textId].view.year == this.Cal_array[textId].select.year  && this.Cal_array[textId].view.month == this.Cal_array[textId].select.month && this.Cal_array[textId].select.date == object.firstChild.nodeValue){
		default_class = this.Cal_array[textId]['class'].select;
	}
	else if(this.Cal_array[textId].view.year  == setCalendar.prototype.today.year && this.Cal_array[textId].view.month == setCalendar.prototype.today.month && object.firstChild.nodeValue ==setCalendar.prototype.today.date){
		default_class = this.Cal_array[textId]['class'].today;
	}
	object.className = default_class;
}

/*
 * テーブルのマウスオーバーイベント
 */
setCalendar.prototype.MouseTableOver = function(textId){
	// 表示カレンダーIDとクリックされたカレンダーのIDを比べるて 一致しない場合
	if(view_calendar != textId){
		// 表示カレンダーIDが空ではないとき
		if(view_calendar != ""){
			// 以前のカレンダーを閉じる
			setCalendar.prototype.cal_Close(view_calendar);
			// 表示カレンダーIDを再設定
			view_calendar = textId;
		}else{
			// 表示カレンダーIDを再設定
			view_calendar = textId;
		}
	}
}

/***********************************************
*
*	月カレンダーの処理
*
************************************************/

//カレンダーの設置
setCalendar.prototype.setMonthly=function(display,textId,jump_filed_hidden)
{
	var set_date = 1;					//日登録用変数
	var text ="";						//表示用
	var color = "";						//表示色変化用
	var last_year;
	var last_month;

	var year=display['year'];
	var month=display['month'];
	var date=display['date'];

	this.Cal_array[textId].view={
			'year':display['year'],
			'month':display['month']
		};

	//開始日の取得
	var start_date = new Date(year,month,1);	//指定した月の1日のデータ
	var start_day = start_date.getDay();		//1日の曜日


	//最終日の取得
	if(setCalendar.prototype.today['month'] == 11){
		last_year = 1;
		last_month = 0;
	}
	else{
		last_year = year;
		last_month = month + 1;
	}

	text += "<table  border='0' class='"+this.Cal_array[textId]['class'].monthly_tbl+"' style='zIndex:"+(this.Cal_array[textId].cal_pos["z-index"]+1)+"'>";

	text += "<tr><td align='center'>";

	//年月指定閉じるボタン作成
//	if(this.Cal_array[textId].jump_close_btn!=false){
//		text += "&nbsp;<input type='button' class='"+this.Cal_array[textId]['class'].jump_close+"' onClick='setCalendar.prototype.jump_month_Close(this,\""+textId+"\")'>";
//	}

	//入力内容クリアボタン
	if(this.Cal_array[textId].clear_btn!=false){
		text = text + "&nbsp;<input type='button' class='"+this.Cal_array[textId]['class'].clear_btn+"' onClick='setCalendar.prototype.month_Clear(\""+textId+"\")'>";
	}

	//ナビあり？
	if(this.Cal_array[textId].prev_next == true){
		text += "<a class='"+this.Cal_array[textId]['class'].navi+"' onClick='setCalendar.prototype.setYear(" + year +",\"back\",\""+textId+"\")'><<</a>";
	}

	// 年指定の表示有り？
	if(this.Cal_array[textId].jump_close_btn!=false){
		// 有りの場合
		text += " <a class='"+this.Cal_array[textId]['class'].jump_close+"' onClick='setCalendar.prototype.jump_month_Close(this,\""+textId+"\")'>"+ year + "年</a> ";
	}else{
		// 無しの場合
		text += ""+ year + "年";
	}

	//ナビあり？
	if(this.Cal_array[textId].prev_next == true){
		text += "<a class='navi' onClick='setCalendar.prototype.setYear("+year+",\"next\",\""+textId+"\")'>>></a>";
	}
	//カレンダー閉じるボタン作成
	if(this.Cal_array[textId].close_btn!=false){
		text += "&nbsp;<input type='button' class='"+this.Cal_array[textId]['class'].cal_close+"' onClick='setCalendar.prototype.cal_Close(\""+textId+"\")'>";
	}
	text += "</td></tr>";
	var jump_state = "none"
	if(this.Cal_array[textId].now_jump_text == null){
		// 初期設定
		this.Cal_array[textId].now_jump_text = this.Cal_array[textId].default_jump_text;
	}
	if(this.Cal_array[textId].now_jump_text != false || (jump_filed_hidden != null && jump_filed_hidden == false) ){

		jump_state = "";
	}

	//年月の指定入力フォーム部分
	text += "<tr style='display:"+jump_state+"'><td colspan='7' >";
	text += "指定：";
	text += "<input type='text' maxlength='4' style='width:34px;ime-mode:disabled;' value='"+year+"' onChange='setCalendar.prototype.month_Jump(this,\""+textId+"\")'>&nbsp;年&nbsp;";
//	text += "<input class='"+this.Cal_array[textId]['class'].jump_btn+"'type='button' style='width:17px;height:17px;' onClick='setCalendar.prototype.month_Jump(this,\""+textId+"\")'>";
	text += "</td></tr>";

	//月カレンダー作成
	for(var i=0; i <= 11; i++)
	{
		text += "<tr>\n";
			var fcolor="";
			// 選択された月の場合
			if(year == this.Cal_array[textId].select.year && i==this.Cal_array[textId].select.month ){
				text += "<td class='"+this.Cal_array[textId]['class'].select+"' style='color:" + fcolor + "' onclick='setCalendar.prototype.selected_month(this,"+i+",\""+textId+"\")' onMouseOver='setCalendar.prototype.MouseOver(this,\""+textId+"\")' onMouseOut='setCalendar.prototype.MouseOutMonth(this,"+i+",\""+textId+"\")'>";
			}
			// 今月の場合
			else if(year == setCalendar.prototype.today.year && i==setCalendar.prototype.today.month ){
				text += "<td class='"+this.Cal_array[textId]['class'].today+"' style='color:" + fcolor + "' onclick='setCalendar.prototype.selected_month(this,"+i+",\""+textId+"\")' onMouseOver='setCalendar.prototype.MouseOver(this,\""+textId+"\")' onMouseOut='setCalendar.prototype.MouseOutMonth(this,"+i+",\""+textId+"\")'>";
			}
			// それ以外
			else{
				text += "<td font style='color:" + fcolor + "' onclick='setCalendar.prototype.selected_month(this,"+i+",\""+textId+"\")' onMouseOver='setCalendar.prototype.MouseOver(this,\""+textId+"\")' onMouseOut='setCalendar.prototype.MouseOutMonth(this,"+i+",\""+textId+"\")'>";
			}
			text += ""+(i+1)+"月";
			text += "</td>";
		text += "</tr>";
	}

	text += "</table>";

	this.Cal_array[textId].cal_Obj.innerHTML = text;

	if(this.Cal_array[textId].select.month != 99){
		for(var i=0;i<=11;i++){

			if(year == this.Cal_array[textId].select.year && i==this.Cal_array[textId].select.month )
			{
				this.Cal_array[textId].old_obj=this.Cal_array[textId].cal_Obj.firstChild.firstChild.childNodes[i];
				break;
			}
		}
	}

	//テキストボックスの初期入力
	if(this.Cal_array[textId].text_flg && this.Cal_array[textId].text_Obj.value==""){
		setCalendar.prototype.setText(this.Cal_array[textId].select.year,this.Cal_array[textId].select.month,this.Cal_array[textId].select.date,textId);
	}
}

/*
 * 来年、前年の処理
 */
setCalendar.prototype.setYear=function(set_year,text,textId)
{
	//来月の表示
	if(text == "next"){
		set_year++;
	}
		//先月の表示
	else if(text == "back"){
		set_year--;
	}

	set_yearmonth = {
					"year":set_year,
					"month":99,
					"date":99
				}
	setCalendar.prototype.setMonthly(set_yearmonth,textId);
}

/*
 * 月選択時の処理
 */
setCalendar.prototype.selected_month=function(object,month,textId){
	default_class = "";

	if(this.Cal_array[textId].select.month != 99){
		if(this.Cal_array[textId].select.year == this.Cal_array[textId].view.year){

			if(this.Cal_array[textId].view.year==setCalendar.prototype.today.year
				&& this.Cal_array[textId].old_obj.innerHTML==((setCalendar.prototype.today.month+1)+"月")){
				default_class =this.Cal_array[textId]['class'].today;
			}

			this.Cal_array[textId].old_obj.className = default_class;
		}
	}

	this.Cal_array[textId].select.year = this.Cal_array[textId].view.year;
	this.Cal_array[textId].select.month = month;

	object.className = this.Cal_array[textId]['class'].select;
	this.Cal_array[textId].old_obj=object;
	setCalendar.prototype.setText(this.Cal_array[textId].view.year ,this.Cal_array[textId].select.month,this.Cal_array[textId].select.date,textId);

	//選択後のカレンダー表示切り替え
	if(!this.Cal_array[textId].after_view){
		setCalendar.prototype.disp_view(textId);
	}
}

/*
 * マウスアウト時
 */
setCalendar.prototype.MouseOutMonth=function(object,month,textId){

	document.body.style.cursor = "default";

	default_class="";
	if(this.Cal_array[textId].view.year == this.Cal_array[textId].select.year  && month == this.Cal_array[textId].select.month){
		default_class =this.Cal_array[textId]['class'].select;

	}
	else if(this.Cal_array[textId].view.year  == setCalendar.prototype.today.year && month == setCalendar.prototype.today.month ){
		default_class =this.Cal_array[textId]['class'].today;
	}

	object.className = default_class;
}

/*
 * 年月指定を閉じる
 */
setCalendar.prototype.jump_month_Close=function(btn_obj,textId){
	obj=btn_obj.parentNode.parentNode.nextSibling;
	if(obj.style.display!="none"){
		obj.style.display="none";
		this.Cal_array[textId].now_jump_text = false;
	}else{
		obj.firstChild.childNodes[1].value=this.Cal_array[textId].view.year;
		obj.style.display="";
		this.Cal_array[textId].now_jump_text = true;
	}
}

/*
 * 年の処理
 */
setCalendar.prototype.month_Jump=function(btn_obj,textId)
{
	year_input=btn_obj.parentNode.childNodes[1].value;

	if(year_input!="" && parseInt(year_input)>0){
			set_yearmonth = {
				"year":parseInt(year_input),
				"month":99,
				"date":99
			}
		setCalendar.prototype.setMonthly(set_yearmonth,textId,false);
	}
}


/**
 * カレンダーの入力をクリアする
 */
setCalendar.prototype.month_Clear=function(textId){
	this.Cal_array[textId].text_Obj.value="";
	this.Cal_array[textId].old_obj = null;

	this.Cal_array[textId].select.year = setCalendar.prototype.today.year;
	this.Cal_array[textId].select.month = 99;
	this.Cal_array[textId].select.date = 99;

}


/*******************************************************
 * 外部実行関数
 *******************************************************/
 // 指定したID以外のカレンダーを閉じる
function closeOthersCalendar(textId){

	// カレンダーの設定分ループ
	for(var i=0;i<setCalendar.prototype.calendar_list.length;i++){

		// カレンダーIDの取得
		var calendar_id = setCalendar.prototype.calendar_list[i];

		if(textId == calendar_id ){
			continue;
		}

		// カレンダーオブジェクトの取得
		var cal_obj = setCalendar.prototype.Cal_array[setCalendar.prototype.calendar_list[i]]['cal_Obj'];
		var cal_btn_obj = setCalendar.prototype.Cal_array[setCalendar.prototype.calendar_list[i]]['cal_btn_Obj'];
		setCalendar.prototype.cal_Close(calendar_id);

	}
}

// カレンダーの状態を変える関数(setCalendar.prototype.disabledCalendarの実行)
function disabledCalendar(textId,style,flg){
	if(style==null || style=="readonly"){
		style="readOnly"
	}

	if(flg == null){
		flg == true;
	}

	if(typeof(textId)=="string"){
		setCalendar.prototype.disabledCalendar(textId,style,flg);
	}else{
		for(var i=0;i<textId.length;i++){
			setCalendar.prototype.disabledCalendar(textId[i],style,flg);
		}
	}
}

// 指定したIDで作成されているカレンダーオブジェクトを削除する
function deleteCalendar(textId){
	setCalendar.prototype.deleteCaledar(textId);
}

// 作成されたカレンダーを削除する
setCalendar.prototype.deleteCaledar = function(textId){
	// 取得できなかった場合は抜ける
	if(this.Cal_array[textId] == null || this.Cal_array[textId]['cal_Obj'] == null){
		return;
	}

	// カレンダーオブジェクトの取得
	var form_obj = this.Cal_array[textId]['form_Obj'];
	// カレンダーオブジェクトの削除
	if(form_obj && form_obj.parentNode){
		form_obj.parentNode.removeChild(form_obj);
	}

	// 位置ポインターが存在する場合それも削除する
	if(this.Cal_array[textId].pointer && this.Cal_array[textId].pointer.parentNode){
		this.Cal_array[textId].pointer.parentNode.removeChild(this.Cal_array[textId].pointer);
	}

	// カレンダーリストのチェック
	var calendar_list = [];
	for(var i=0;i<setCalendar.prototype.calendar_list.length;i++){
		var calendar_id = setCalendar.prototype.calendar_list[i];
		if(calendar_id != textId){
			calendar_list.push(calendar_id);
		}
	}
	setCalendar.prototype.calendar_list = calendar_list;

	// 確認用
//	for(var i=0;i<setCalendar.prototype.calendar_list.length;i++){
//		var calendar_id = setCalendar.prototype.calendar_list[i];
//	}
}

// ダミーの画像が押されたときにカレンダーを作成して表示する
function createCalendarClickDumyObj(textid,dumy_obj,option){

	var ncal = new setCalendar(textid);
	ncal.setOption(option);
	ncal.createCalendar();
	closeOthersCalendar("");
	setCalendar.prototype.disp_view(textid)
	dumy_obj.style.display = "none"

}


/**
 * 指定した日付が休日かどうかをチェックする。
 * 休日なら休日名を返す。
 * @param {Object} year
 * @param {Object} month
 * @param {Object} day
 */
setCalendar.prototype.checkHoliday = function(year,month,day){

	var holiday_name = "";
	var year2 = year - 2000;

	var syunbun = parseInt(20.69115 + 0.2421904 * year2 - parseInt(year2/4 + year2/100 + year2/400));
	var syuubun = parseInt(23.09000 + 0.2421904 * year2 - parseInt(year2/4 + year2/100 + year2/400));

	var day_week = new Date(year,month,day).getDay();
	var start_day_week = new Date(year,month,1).getDay();

	// 何週目かを取得する
//	var week_num = Math.floor((day+start_day_week) / 7);
//	if((day+start_day_week) % 7 != 0){
//		week_num++;
//	}

	// 何回目の曜日かを取得する
	var week_num = Math.floor((day) / 7);
	if((day) % 7 != 0){
		week_num++;
	}

	var kokuminf = false;
	var kokumin = null;

	var august_start_week = new Date(year,(9-1),1).getDay();

	var keiro = 21;	//敬老の日の日付（国民の祝日の有無確認のため）
	if(august_start_week > 2){
		keiro = 21-august_start_week - 5;
	}else{
		keiro = 21-august_start_week + 2;
	}

	if ((syuubun - keiro) == 2) {
	//敬老の日の２日後が秋分の日なら
		kokumin = syuubun - 1;
	}

	month += 1;	// 月を表記用に変更
	if ((month == 1) && (day == 1)) {
	//元日（1月1日なら）
		holiday_name = "元日";
	} else if ((month == 1) && (day == 2) && (day_week == 1)){
	//元日の振替休日（1月2日が月曜なら）
		holiday_name = "振替休日";
	} else if ((month == 1) && (week_num == 2) && (day_week == 1)){
	//成人の日（1月の第2月曜なら）
		holiday_name = "成人の日";
	} else if ((month == 2) && (day== 11)) {
	//建国記念の日（2月11日なら）
		holiday_name = "建国記念の日";
	} else if ((month == 2) && (day == 12) && (day_week == 1)) {
	//建国記念の日の振替休日（2月12日が月曜なら）
		holiday_name = "建国記念の日の振替休日";
	} else if ((year  > 1999 ) && (month == 3) && (day == syunbun)) {
	//春分の日（計算式による）
		holiday_name = "春分の日";
	} else if ((year  > 1999 ) && (month == 3) && (day == (syunbun + 1)) && (day_week == 1)) {
	//春分の日の振替休日
		holiday_name = "春分の日の振替休日";
	} else if ((year < 2007) && (month == 4) && (day == 29)) {
	//2006年みどりの日（4月29日なら）
		holiday_name = "みどりの日";
	} else if ((year < 2007) && (month == 4) && (day == 30) && (day_week == 1)) {
	//みどりの日の振替休日（4月30日が月曜なら）
		holiday_name = "みどりの日の振替休日";
	} else if ((year > 2006) && (month == 4) && (day == 29)) {
	//昭和の日（4月29日なら）
		holiday_name = "昭和の日";
	} else if ((year > 2006) && (month == 4) && (day == 30) && (day_week == 1)){
	//昭和の日の振替休日（4月30日が月曜なら）
		holiday_name = "昭和の日の振替休日";
	} else if ((month == 5) && (day == 3)) {
	//憲法記念日（5月3日なら）
		holiday_name = "憲法記念日";
	} else if (
				((year < 2007) && (month == 5) && (day == 4) && (day_week == 2))
				||
				((year < 2007) && (month == 5) && (day == 4) && (day_week == 3))
				||
				((year < 2007) && (month == 5) && (day == 4) && (day_week == 4))
				||
				((year < 2007) && (month == 5) && (day == 4) && (day_week == 5))
				||
				((year < 2007) && (month == 5) && (day == 4) && (day_week == 6))
			){
	//国民の休日（5月4日が火潤ｵ土曜日なら）
		holiday_name = "国民の休日";
	} else if ((year > 2006) && (month == 5) && (day == 4)){
		holiday_name = "みどりの日";
	} else if ((month == 5) && (day == 5)) {
	//こどもの日（5月5日なら）
		holiday_name = "こどもの日";
	} else if ((year < 2007) && (month == 5) && (day == 6) && (day_week == 1)) {
	//こどもの日の振替休日（5月6日が月曜なら）
		holiday_name = "こどもの日の振替休日";
	} else if ((year > 2006) && (month == 5) && (day == 6)) {
	//３連祝日のどれかが日曜なら振替休日

		if ((year > 2006) && (new Date(year,(5 - 1),3).getDay() == 0)) {
			//憲法記念日が日曜なら
			kokuminf = true;	//振替休日有りの印を付ける
		}

		//2007年以降みどりの日（5月4日なら）
		if ((year > 2006) && (kokuminf != true) && (new Date(year,(5 - 1),4).getDay() == 0)){
			//みどりの日が日曜なら
			kokuminf = true;	//振替休日有りの印を付ける
		}

		if ((year > 2006) && (kokuminf != true) && (new Date(year,(5 - 1),5).getDay() == 0)) {
			//こどもの日が日曜なら
			kokuminf = true;	//振替休日有りの印を付ける
		}

		if(kokuminf){
			holiday_name = "振替休日";
		}
	} else if ((month == 7) && (week_num == 3) && (day_week == 1)) {
	//海の日（7月の第3月曜なら）
		holiday_name = "海の日";
	} else if ((month == 9) && (week_num == 3) && (day_week == 1)) {
	//敬老の日（9月の第3月曜なら）
		holiday_name = "敬老の日";
	} else if ((kokumin) && ((month == 9) && (day == kokumin))) {
	//９月の国民の休日が有りなら
		holiday_name = "国民の休日";
	} else if ((year  > 1999 ) && (month == 9) && (day == syuubun)) {
	//秋分の日（計算式による）
		holiday_name = "秋分の日";
	} else if ((year  > 1999 ) && (month == 9) && (day == (syuubun + 1)) && (day_week == 1)) {
	//秋分の日の振替休日
		holiday_name = "秋分の日の振替休日";
	} else if ((month == 10) && (week_num == 2) && (day_week == 1)) {
	//体育の日（10月の第2月曜なら）
		holiday_name = "体育の日";
	} else if ((month == 11) && (day == 3)) {
	//文化の日（11月3日なら）
		holiday_name = "文化の日";
	} else if ((month == 11) && (day == 4) && (day_week == 1)) {
	//文化の日の振替休日（11月4日が月曜なら）
		holiday_name = "文化の日の振替休日";
	} else if ((month == 11) && (day == 23)) {
	//勤労感謝の日（11月23日なら）
		holiday_name = "勤労感謝の日";
	} else if ((month == 11) && (day == 24) && (day_week == 1)) {
	//勤労感謝の日の振替休日（11月24日が月曜なら）
		holiday_name = "勤労感謝の日の振替休日";
	} else if ((month == 12) && (day == 23)) {
	//天皇誕生日（12月23日なら）
		holiday_name = "天皇誕生日";
	} else if ((month == 12) && (day == 24) && (day_week == 1)) {
	//天皇誕生日の振替休日（12月24日が月曜なら）
		holiday_name = "天皇誕生日の振替休日";
	}

	return holiday_name;
}


setCalendar.prototype.div;

/**
 * カレンダー移動イベント追加処理
 * @param {Object} event
 */
setCalendar.prototype.addXY = function(event) {

	var event_obj = null;	// マウスオーバーしたオブジェクト
	if( window.event ){
		event_obj = window.event.srcElement ;
	}else {
		event_obj = event.target;
	}

	if(event_obj == ""){
		return;
	}

	if(event_obj.tagName=="INPUT" || event_obj.tagName == "SELECT"){
		return;
	}

	var target_obj = event_obj;
	while(target_obj.parentNode && target_obj.tagName != "SPAN" ){
		target_obj = target_obj.parentNode;
	}

	if(target_obj.tagName!="SPAN"){
		return;
	}

	setCalendar.prototype.div = target_obj;
	setCalendar.prototype.div.style.cursor="move";

	setCalendar.prototype.addEvent(document,'mousedown',setCalendar.prototype.start,false)

}
/**
 * カレンダー移動イベント削除処理
 */
setCalendar.prototype.removeXY = function () {
	setCalendar.prototype.deleteEvent('mousedown',setCalendar.prototype.start,false)
}
/**
 * カレンダー移動開始処理
 * @param {Object} event
 */
setCalendar.prototype.start = function (event) {

	var e = null;
	var event_obj = null;
	if( window.event ){
		e = window.event;
		event_obj = e.srcElement;
	}else {
		e = event;
		event_obj = event.target;
	}

	if(event_obj.tagName=="INPUT" || event_obj.tagName == "SELECT"){
		return;
	}

	this.ex = e.clientX - parseInt(setCalendar.prototype.div.style.left); /* マウスと左上の点との差分*/
	this.ey = e.clientY - parseInt(setCalendar.prototype.div.style.top);

	setCalendar.prototype.addEvent(document,'mousemove',setCalendar.prototype.drag,false)
	setCalendar.prototype.addEvent(document,'mouseup',setCalendar.prototype.end,false)

	this.opacity = setCalendar.prototype.div.style.opacity;              /* 現在の半透明状態をキャッシュ*/
	setCalendar.prototype.div.style.opacity = this.opacity * 0.4;        /* 表示を半透明にする */


}

/**
 * カレンダー移動実行処理
 * @param {Object} event
 */
setCalendar.prototype.drag = function (event) {
	var e = null;
	var event_obj = null;
	if( window.event ){
		e = window.event;
		event_obj = e.srcElement;
	}else {
		e = event;
		event_obj = event.target;
	}

	var dx = e.clientX - this.ex;
	var dy = e.clientY - this.ey;

	setCalendar.prototype.div.style.left =  dx + 'px';
	setCalendar.prototype.div.style.top = dy + 'px';

	var div_obj = setCalendar.prototype.div.nextSibling;
	while(div_obj.tagName != "DIV"){
		div_obj = div_obj.nextSibling;
	}

	div_obj.style.left = setCalendar.prototype.div.style.left;
	div_obj.style.top = setCalendar.prototype.div.style.top;

}

/**
 * カレンダー移動終了処理
 */
setCalendar.prototype.end = function() {

	setCalendar.prototype.div.style.opacity = this.opacity;

	setCalendar.prototype.deleteEvent(document,"mousemove",setCalendar.prototype.drag,false);
	setCalendar.prototype.deleteEvent(document,"mouseup",setCalendar.prototype.end,false);

}

/**
 * イベント追加ラップ関数
 * @param {Object} element
 * @param {Object} eventType
 * @param {Object} fn
 * @param {Object} useCapture
 */
setCalendar.prototype.addEvent = function(element, eventType, fn, useCapture) {
	if (element.addEventListener) { // W3C DOM 系 - FireFox ...
		element.addEventListener(eventType, fn, useCapture);
		return true;
	}
	else if (element.attachEvent) { // Internet Explorer 系
		var r = element.attachEvent('on' + eventType, fn);
		return r;
	}
	else {
		element['on'+eventType] = fn;
	}
}

/**
 * イベント削除ラップ関数
 * @param {Object} element
 * @param {Object} eventType
 * @param {Object} fn
 * @param {Object} useCapture
 */
setCalendar.prototype.deleteEvent = function(element, eventType, fn, useCapture) {
	if (element.removeEventListener) { // W3C DOM 系 - FireFox ...
		element.removeEventListener(eventType, fn, useCapture);
		return true;
	}
	else if (element.detachEvent) { // Internet Explorer 系
		var r = element.detachEvent('on' + eventType, fn);
		return r;
	}
	else {
		element['on'+eventType] = null;
	}
}

// 一時的なカレンダーを作成
function createOneTimeCalendar(textId,dumy_obj,option){

	option["one_time_flg"] = true;
	option["auto_hidden"] = false;
	option["btn_flg"] = false;

	if(setCalendar.prototype.getCalendar_display(textId)=="none"){
		var ncal = new setCalendar(textId);
		ncal.setOption(option);
		ncal.createCalendar();
		closeOthersCalendar("");
		setCalendar.prototype.disp_view(textId);
	}else{
		setCalendar.prototype.cal_Close(textId);
	}
}

// エレメントの絶対指定位置を取得する
setCalendar.prototype.getElementScreenPosition=function(element)
{
	var left = 0;
	var top = 0;
	while( element ){
		left += element.offsetLeft;
		top  += element.offsetTop;
		element = element.offsetParent;
	}
	return { "left": left, "top": top };
}

//ウインドウサイズ取得
setCalendar.prototype.GetWindowSize=function(type){
	switch(type){
		case "width":
			if(document.all){
				return(document.body.clientWidth);
			}else if(document.layers){
				return(innerWidth);
			}else{
				return(-1);
			}
		break;
		case "height":
			if(document.all){
				return(document.body.clientHeight);
			}else if(document.layers){
				return(innerHeight);
			}else{
				return(-1);
			}
		break;
		default:
			return(-1);
		break;
	}
}

